/**
 * @(#)TemplateUtils.java
 *       
 * project：taiping-common
 * 
 * Copyright ©2013 - 2014 太平电子商务有限公司.  All rights reserved.
 * ADDRESS: 中国 上海 浦东新区 民生路1399号 9楼
 */

import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.IOException;
import java.io.StringWriter;

/**
 *<p>Description : TemplateUtils工具类</p>
 *<p>Date        : May 3, 2013</p>
 *<p>Remark      : </p>
 * @author zhangLin
 * @version
 */
public class TemplateUtils {
	
	/**
	 * 将对象转换成字符串结果
	 * @param templateName 以resources为根的相对路径的文件名
	 * @param obj 要填充的对象
	 * @return String 转换结果
	 * @throws java.io.IOException
	 */
	public static String parse(String templateName, Object obj) throws IOException {
		Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
		//获取模板
		cfg.setClassForTemplateLoading(TemplateUtils.class, "/");
		Template template  = cfg.getTemplate(templateName, "UTF-8");
		//模板的xml
		String templateStr = template.toString();
		return writeXML(obj, templateStr);
	}

	/**
	 * 转换Template 成XML格式
	 * @return String 类型
	 * @throws java.io.IOException
	 *             异常
	 */
	public static String templateToString(String templateName) throws IOException {
		Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
		//获取模板
		cfg.setClassForTemplateLoading(TemplateUtils.class, "/");
		Template template  = cfg.getTemplate(templateName, "UTF-8");
		//模板的xml
		String templateStr = template.toString();

		return templateStr;
	}

	/**
	 * 将对象值写入XML模板中
	 *
	 * @param o
	 *            实体类对象
	 *            模板xml字符串
	 * @return 返回xml字符串
	 * @throws java.io.IOException
	 *            异常
	 * @throws freemarker.template.TemplateException
	 *            异常
	 */
	public static String writeXML(Object o, String templateContent) {
		// 创建Configuration对象
		Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
		// 创建StringTemplateLoader对象
		StringTemplateLoader stringLoader = new StringTemplateLoader();
		// 传入的xml字符串
		stringLoader.putTemplate("template", templateContent);
		// 设定模板
		cfg.setTemplateLoader(stringLoader);
		// 创建StringWriter对象
		StringWriter out = new StringWriter();
		// 获取字符串模板
		try {
			Template template = cfg.getTemplate("template");
			// 对象值写入xml模板
			template.process(o, out);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
			e.printStackTrace();
		} finally {
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return out.toString();
	}
	
	

}
